/*
 * ASerialResponse.cpp
 *
 * @author Bematech S.A.
 */

#include "bilbao/protocol/serial/ASerialResponse.h"

namespace bilbao
{
	namespace protocol
	{
		namespace serial
		{
			//--------------------------------------------------------------------------------
			// Construtor e destrutor
			//--------------------------------------------------------------------------------
			ASerialResponse::ASerialResponse( E_SERIAL_RESPONSE_ID id, ASefazResponse::E_SEFAZ_RESPONSE_ID code )
				: _parameters(), _id( id ), _code(code)
			{
				// Do nothing
			}
			//--------------------------------------------------------------------------------
			ASerialResponse::~ASerialResponse( void )
			{
				// Do nothing
			}
			//--------------------------------------------------------------------------------
			// Método getResponse. Retorna uma string com todos os parâmetros separados pelo
			// caractere |.
			//--------------------------------------------------------------------------------
			void ASerialResponse::getMessageFormatted( String& resp )
			{
				resp.clear();

				for ( size_t i = 0; i < _parameters.size(); i++ )
				{
					resp += _parameters[i];

					if ( i < _parameters.size() - 1 )
						resp += "|";
				}
			}
			//--------------------------------------------------------------------------------
			String ASerialResponse::getMessageSerialResponse( E_SERIAL_RESPONSE_ID id )
			{
				//TODO: Construir esse Switch
				switch( id )
				{
					//Mesnsagens função AtivarSAT
					case ATIVAR_SAT_ATIVADO_CORRETAMENTE:
						return "Ativado corretamente";
					case ATIVAR_SAT_ERRO_CRIACAO_CERTIFICADO:
						return "Erro na criação do certificado";
					case ATIVAR_SAT_CNPJ_INVALIDO:
						return "SEFAZ não reconhece este SAT-CF-e (CNPJ inválido)";
					case ATIVAR_SAT_SAT_JA_ATIVADO:
						return "SAT-CF-e já ativado";
					case ATIVAR_SAT_POSSE_CESSADA:
						return "SAT-CF-e com posse cessada";
					case ATIVAR_SAT_ERRO_COM_SEFAZ:
						return "Erro de comunicação com a SEFAZ";
					case ATIVAR_SAT_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case ATIVAR_SAT_ERRO_DESCONHECIDO:
					return "Erro desconhecido na ativação";

					//Mensagens função ComunicarCertificadoICPBRASIL
					case CERT_ICP_BRASIL_SUCESSO:
						return "Certificado transmitido com Sucesso";
					case CERT_ICP_BRASIL_ERRO_COM_SEFAZ:
						return "Erro de comunicação com a SEFAZ";
					case CERT_ICP_BRASIL_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case CERT_ICP_BRASIL_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função EnviarDadosVenda
					case ENVIAR_D_VENDA_SUCESSO:
						return "Emitido com sucesso + conteúdo notas.";
					case ENVIAR_D_VENDA_COD_ATIV_INVALIDO:
						return "Código de ativação inválido";
					case ENVIAR_D_VENDA_SAT_NAO_ATIVADO:
						return "SAT-CF-e ainda não ativado";
					case ENVIAR_D_VENDA_SAT_NAO_VINCULADO:
						return "SAT-CF-e não vinculado ao AC";
					case ENVIAR_D_VENDA_VINC_NAO_CONFERE:
						return "Vinculação do AC não confere";
					case ENVIAR_D_VENDA_CFE_MAIOR:
						return "Tamanho do CF-e superior a 1.500Kb";
					case ENVIAR_D_VENDA_SAT_BLOQ_CON:
						return "SAT-CF-e bloqueado pelo contribuinte";
					case ENVIAR_D_VENDA_SAT_BLOQ_SEFAZ:
						return "SAT-CF-e bloqueado pela SEFAZ";
					case ENVIAR_D_VENDA_SAT_BLOQ_FALTA_COM:
						return "SAT-CF-e bloqueado por falta de comunicação";
					case ENVIAR_D_VENDA_SAT_BLOQ_COD_INCORRETO:
						return "SAT-CF-e bloqueado, código de ativação incorreto";
					case ENVIAR_D_VENDA_ERRO_VALIDACAO:
						return "Erro de validação do conteúdo";
					case ENVIAR_D_VENDA_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case ENVIAR_D_VENDA_ERRO_DESCONHECIDO:
						return "Erro desconhecido na emissão";

					//Mensagens função CancelarUltimaVenda
					case CANC_ULT_VENDA_SUCESSO:
						return "Cupom cancelado com sucesso + conteúdo CF-e cancelado";
					case CANC_ULT_VENDA_COD_INVALID:
						return "Código ativação inválido";
					case CANC_ULT_VENDA_CUP_INVALID:
						return "Cupom inválido";
					case CANC_ULT_VENDA_BLOQ_CON:
						return "SAT-CF-e bloqueado pelo contribuinte";
					case CANC_ULT_VENDA_BLOQ_SEFAZ:
						return "SAT-CF-e bloqueado pela SEFAZ";
					case CANC_ULT_VENDA_BLOQ_FALTA_COM:
						return "SAT-CF-e bloqueado por falta de comunicação";
					case CANC_ULT_VENDA_BLOQ_COD_INCORRETO:
						return "SAT-CF-e bloqueado, código de ativação incorreto";
					case CANC_ULT_VENDA_ERRO_VALIDACAO:
						return "Erro de validação do conteúdo";
					case CANC_ULT_VENDA_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case CANC_ULT_VENDA_ERRO_DESCONHECIDO:
						return "Erro desconhecido no cancelamento";

					//Mensagens função ConsultarSAT
					case CONSUL_SAT_SAT_EM_OPERACAO:
						return "SAT-CF-e em operação";
					case CONSUL_SAT_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case COSUL_SAT_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função TesteFimAFim
					case TESTE_FIM_FIM_SUCESSO:
						return "Emitido com sucesso";
					case TESTE_FIM_FIM_COD_INVALID:
						return "código ativação inválido";
					case TESTE_FIM_FIM_SAT_NAO_ATIVADO:
						return "SAT-CF-e ainda não ativado";
					case TESTE_FIM_FIM_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case TESTE_FIM_FIM_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função ConsultarStatusOperacional
					case CONS_STA_OPER_SUCESSO:
						return "Resposta com Sucesso";
					case CONS_STA_OPER_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case CONS_STA_OPER_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função ConsultarNumeroSessao
					case CONS_NUM_SESSAO_SUCESSO:
						return "REmitido com sucesso";
					case CONS_NUM_COD_INVALIDO:
						return "código ativação inválido";
					case CONS_NUM_SESSAO_SAT_NAO_ATIVADO:
						return "SAT-CF-e ainda não ativado";
					case CONS_NUM_SESSAO_DOC_NAO_EXISTE:
						return "Documento não existe";
					case CONS_NUM_SESSAO_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case CONS_NUM_SESSAO_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função ConfiguracaoDeRede
					case CONFIG_REDE_SUCESSO:
						return "Rede Configurada com Sucesso";
					case CONFIG_REDE_DADOS_FORA_PADRAO:
						return "Dados fora do padrão a ser informado";
					case CONFIG_REDE_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case CONFIG_REDE_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função AssociarAssinatura
					case ASSO_ASSINATURA_SUCESSO:
						return "Assinatura do AC Registrada";
					case ASSO_ASSINATURA_ERRO_COM_SEFAZ:
						return "Erro de comunicação com a SEFAZ";
					case ASSO_ASSINATURA_FORA_PADRAO:
						return "Assinatura fora do padrão informado";
					case ASSO_ASSINATURA_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case ASSO_ASSINATURA_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função AtualizarSAT
					case ATUAL_SAT_SUCESSO:
						return "Software Atualizado com Sucesso";
					case ATUAL_SAT_EM_ANDAMENTO:
						return "Atualização em Andamento";
					case ATUAL_SAT_ERRO_ATUALIZACAO:
						return "Erro na atualização";
					case ATUAL_SAT_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case ATUAL_SAT_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função ExtrairLog
					case EXTRAIR_LOG_COMPLETA:
						return "Transferência completa";
					case EXTRAIR_LOG_EM_ANDAMENTO:
						return "Transferência em andamento";
					case EXTRAIR_LOG_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case EXTRAIR_LOG_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função BloquearSAT
					case BLOQ_SAT_SUCESSO:
						return "Equipamento SAT-CF-e bloqueado com sucesso";
					case BLOQ_SAT_EQUI_JA_BLOQUEADO:
						return "Equipamento SAT-CF-e já está bloqueado";
					case BLOQ_SAT_ERRO_COM_SEFAZ:
						return "Erro de comunicação com a SEFAZ";
					case BLOQ_SAT_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case BLOQ_SAT_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função DesbloquearSAT
					case DESBLOQ_SAT_SUCESSO:
						return "Equipamento SAT-CF-e desbloqueado com sucesso";
					case DESBLOQ_SAT_BLOQ_P_CONT:
						return "SAT-CF-e bloqueado pelo contribuinte";
					case DESBLOQ_SAT_BLOQ_P_SEFAZ:
						return "SAT-CF-e bloqueado pela SEFAZ";
					case DESBLOQ_SAT_ERRO_COM_SEFAZ:
						return "Erro de comunicação com a SEFAZ";
					case DESBLOQ_SAT_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case DESBLOQ_SAT_ERRO_DESCONHECIDO:
						return "Erro desconhecido";

					//Mensagens função TrocarCodigoAtivacao
					case TROC_COD_ATIV_SUCESSO:
						return "Código de ativação alterado com sucesso";
					case TROC_COD_ATIV_COD_INCORRETO:
						return "Código de ativação Incorreto";
					case TROC_COD_ATIV_COD_EMER_INCOR:
						return "Código de ativação de emergência Incorreto";
					case TROC_COD_ATIV_SAT_EM_PROCESSAMENTO:
						return "SAT-CF-e em processamento. Tente novamente.";
					case TROC_COD_ATIV_ERRO_DESCONHECIDO:
						return "Erro desconhecido";
					//
					default:
						return "Nao foi encontrado mensagem correspondete para esse CODE.";
				}
			}
			//--------------------------------------------------------------------------------
			void ASerialResponse::setParameter( size_t pos, const String& parameter )
			{
				if ( pos < _parameters.size() )
					_parameters[pos] = parameter;
			}
			//--------------------------------------------------------------------------------
			String ASerialResponse::EEEEtoString( E_SERIAL_RESPONSE_ID id )
			{
				char buff[6];
				sprintf( buff, "%05d", id );
				String str( buff );
				return str;
			}

		} // namespace serial
	} // namespace protocol
} // namespace bilbao
